http://plot.ly


Plot.ly


Some plots are posted to the web for processing, but most plotting is now implemented in the client, and inside RStudio everything is done offline


Interactive scatter plots

head(diamonds) # example dataset
## # A tibble: 6 × 10
##   carat       cut color clarity depth table price     x     y     z
##   <dbl>     <ord> <ord>   <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1  0.23     Ideal     E     SI2  61.5    55   326  3.95  3.98  2.43
## 2  0.21   Premium     E     SI1  59.8    61   326  3.89  3.84  2.31
## 3  0.23      Good     E     VS1  56.9    65   327  4.05  4.07  2.31
## 4  0.29   Premium     I     VS2  62.4    58   334  4.20  4.23  2.63
## 5  0.31      Good     J     SI2  63.3    58   335  4.34  4.35  2.75
## 6  0.24 Very Good     J    VVS2  62.8    57   336  3.94  3.96  2.48

Basic 2d scatter

d <- diamonds[sample(nrow(diamonds), 1000), ]
plot_ly(d, x = ~carat, y = ~price)

2d scatter with marker size, colour and custom labels

d <- diamonds[sample(nrow(diamonds), 1000), ]
plot_ly(d,
        x = ~carat,
        y = ~price,
        color = ~carat,
        size = ~carat,
        text = ~paste("Price: ", price, '$<br>Cut:', cut))
# Lots of information easily accessible, not overwhelming

As above, but using plotly_POST to share charts (requires a plot.ly account)

d <- diamonds[sample(nrow(diamonds), 1000), ]
c <- plot_ly(d,
             x = ~carat,
             y = ~price,
             color = ~carat,
             size = ~carat,
             text = ~paste("Price: ", price, '$<br>Cut:', cut))

chart_link = plotly_POST(c, filename="scatterer")
chart_link # returns URL of web chart

Box and whisker

plot_ly(diamonds, x = ~price, color = ~cut, type = "box")

Bubble plots

ggplotly()

p <- ggplot(data = d, aes(x = carat, y = price)) +
     geom_point(aes(text = paste("Clarity:", clarity))) +
     geom_smooth(aes(colour = cut, fill = cut)) + facet_wrap(~ cut)

ggplotly(p)

Chart type inference

subplot(
  plot_ly(diamonds, y = ~cut, color = ~clarity),
  plot_ly(diamonds, x = ~cut, color = ~clarity),
  margin = 0.05
) %>% hide_legend() 

Or send discrete variables to both X and Y:

plot_ly(diamonds, x = ~cut, y = ~clarity)